import java.lang.reflect.Array;
import java.util.Arrays;

public class MyArrayList implements IList{
   public int[] elem;
   public int usedSize;
    public static final int fixed = 5;//固定容量
    public MyArrayList() {
        elem = new int[fixed];
    }
    @Override
    public void add(int data) {
    //判断是否满，满了扩容。
        if(isFull()) {
            elem = Arrays.copyOf(elem,(2*elem.length));
        }
        elem[usedSize] = data;
        usedSize++;
    }

    @Override
    public void add(int pos, int data) { //给pos位置增加元素
    //1.判断pos位置
        checkPosLocation(pos);
    //2.判断是否已满
        if(isFull()) {
        elem = Arrays.copyOf(elem,2*elem.length);
         }
    //将pos位置空出
        for (int i = usedSize-1; i >= pos ; i--) {
            elem[i+1] = elem[i];
        }
    //插入数据data。
        elem[pos] = data;
        usedSize++;
    }
    private void checkPosLocation(int pos) {
        if(pos<0||pos>usedSize) {
            throw new PoseException("pos位置为:"+pos);
        }
    }
    @Override
    public boolean contains(int toFind) {//判断是否包含数据
        for (int i = 0; i < usedSize; i++) {
            if(elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }

    @Override
    public int indexOf(int toFind) {//查找某个数据下标
        for (int i = 0; i < usedSize; i++) {
            if (elem[i]==toFind) {
                return i;
            }
        }
       return -1;
    }

    @Override
    public int get(int pos) {//获取pos位置的数据
        //判断pos是否合法
        checkPosLocation(pos);
        //判断顺序表是否为空
        if(isEmpty()) {
            throw new EmptyException("顺序表为空");
        }
        return elem[pos];
    }

    @Override
    public void set(int pos, int value) {//设置pos下标的数值为value
        //判断pos是否合法
        checkPosLocation(pos);
        if(isEmpty()) {
            throw new EmptyException("顺序表为空");
        }
        elem[pos] = value;
    }

    @Override
    public void remove(int toRemove) {//删除toRemove这个数据
        if(isEmpty()) {
            throw new EmptyException("顺序表为空，不能删除");
        }
        int index = indexOf(toRemove);
        for (int i = index; i <usedSize-1 ; i++) {
            elem[i] = elem[i+1];
        }
        usedSize--;
    }

    @Override
    public int size() {//计算长度
        return usedSize;
    }

    @Override
    public void clear() {//清除链表
      usedSize = 0;
    }

    @Override
    public void display() {
        for (int i = 0; i < usedSize; i++) {
            System.out.print(elem[i]+" ");
        }
        System.out.println();
    }

    @Override
    public boolean isFull() {//数组判满
        return elem.length == usedSize;
    }

    @Override
    public boolean isEmpty() {
        return usedSize == 0;
    }
}
